package moodle.Agentes.actions.BuscadorAgente;

import java.math.BigInteger;
import java.util.ArrayList;
import java.util.ConcurrentModificationException;
import java.util.List;
import java.util.Set;

import javax.swing.JOptionPane;


import moodle.Org.MoodleEnv;
import moodle.dados.Aluno;
import moodle.dados.Curso;
import moodle.dados.Pessoa;
import moodle.dados.Tag;
import moodle.dados.mensagem.Mensagem;
import dao.GerenciaCurso;
import jamder.Environment;
import jamder.behavioural.Action;
import jamder.behavioural.Condition;

public class ExibirPessoasRelacionadasAc extends Action{

	private boolean done = false;
	private boolean mantemAtivo;
	
	public ExibirPessoasRelacionadasAc(String name) {
		super(name);
		// TODO Auto-generated constructor stub
	}
	
	public ExibirPessoasRelacionadasAc(String name, Condition pre_condition,Condition pos_condition) {
		super(name, pre_condition, pos_condition);
	}
	
	private List<Aluno> buscaPessoa(Aluno a, List<Aluno> alunos, Tag tag){
		//Remove o aluno pasado como paramentro 
		alunos.remove(a);
		List<Aluno> aluosRekacionados = new ArrayList<Aluno>();
		for(Aluno al : alunos){
			//Caso o aluno corrente tenha a tag, ser� add na lista de alunos relacionados 
			if(al.getTags().contains(tag))
				aluosRekacionados.add(al);		
		}
		
		return aluosRekacionados;
	}
	
	
	@Override
	public void execute(Environment env, Object[] params) {
		super.execute(env, params);
		
		block(14* 1000L);
	
		mantemAtivo = ((MoodleEnv) env).getMantemAgentesAtivos();

		if (!mantemAtivo)
			return;

		GerenciaCurso manager = ((MoodleEnv) env).getGerenciaCurso();

		BigInteger useridfrom = new BigInteger("2");

		boolean podeEnviar = false;

		List<Curso> cursos = manager.getCursos();

		List<Aluno> todosAlunos = new ArrayList<Aluno>();

		for (Curso c : cursos) {
			Set<Aluno> alunosCurso = c.getAlunos();
			for (Aluno aluno : alunosCurso) {
				if (!todosAlunos.contains(aluno)){
					todosAlunos.add(aluno);
				}
			}
		}
		
	
		for (Aluno aluno : todosAlunos) {
		
			//Percorre todas as Tags do aluno
			BigInteger useridto = aluno.getId();
			String smallmessage = "Ol� "+ aluno.getCompleteName()+" analisando sua lista de tags de interesses, segue abaixo uma lista de alunos com interesses em comum \n";
			for (Tag tag : aluno.getTags()) {
				//Lista de alunos que apresentam os mesmos interesses 
				List<Aluno> alunosRelacionados = buscaPessoa(aluno, todosAlunos, tag);
				
				//Caso a lista de alunos n�o esteja vazia
				if(!alunosRelacionados.isEmpty()){
					podeEnviar = true;
					smallmessage+=" - "+tag.getName()+"\n";
					
					for (Aluno a : alunosRelacionados) {
						smallmessage+=" "+a.getCompleteName()+" : "+a.getEmail()+"\n";
					}
				}
				
			}
			
			smallmessage+="Procure entrar em contato com essas pessoas para trocar ideias, tirar uma eventual d�vida, etc.";
			
			if (podeEnviar) {
				smallmessage += "\n";
				String fullmessage = smallmessage;
				fullmessage += "\n--------------------------------------------------------------------- \nEste e-mail � uma copia de uma mensagem que foi enviada para voc� em \"GESMA\". Clique http://127.0.1.1/moodle/message/index.php?user="+ useridto + "&id= " + useridfrom + " para responder. ";
				Long time = System.currentTimeMillis();
				Mensagem msg = new Mensagem();
				msg.setSubject("Nova mensagem do Administrador");
				msg.setUseridfrom(useridfrom);
				msg.setUseridto(useridto);
				msg.setSmallmessage(smallmessage);
				msg.setFullmessage(fullmessage);
				msg.setTimecreated(time);

				((MoodleEnv) env).addMensagem(msg);
			}
			
		
		}
	

	}
	
	public boolean done(){
		return done;
	}
}
